package everest3.materialBibliografico;

import tablasYBasesdeDatos.S15WorkingBackspace;

import javax.swing.JComboBox;

/**
 * Clase que genera un <CODE>javax.swing.JComboBox</CODE> con los valores de una columna
 * @author Julian Libreros Cardona
 */
public class ComboBoxValores extends javax.swing.JComboBox
{
    /**
     * Constructor que extrae una columna de la tabla especificada
     * y genera un <CODE>javax.swing.JComboBox</CODE> con los valores de dicha columna
     * @param columna columna a extraer
     * @param tabla Tabla de la cual se extraera la columna
     */
    public ComboBoxValores(String columna, String tabla)
    {
        super();
        setEditable(true);
        new S15WorkingBackspace(this);
        obtenerValoresColumna(columna,tabla);
    }
    
    private void obtenerValoresColumna(String col, String table)
    {
        tablasYBasesdeDatos.JDBCAdapter obj = new tablasYBasesdeDatos.JDBCAdapter(
                                                "jdbc:postgresql://localhost:5432/everest",
                                                 "org.postgresql.Driver","postgres","root");
        
        java.util.Vector resultadoBusqueda = obj.consultaCampos("SELECT DISTINCT "+col+" FROM "+table);
        
        if(resultadoBusqueda.size()==0)
            javax.swing.JOptionPane.showMessageDialog(null,
                                        "No se obtuvo nada",
                                        "Error",javax.swing.JOptionPane.WARNING_MESSAGE);
        
        else
        {
            java.text.DecimalFormat df = new java.text.DecimalFormat("000");
            
            for(int i=0; i<resultadoBusqueda.size();i++)
                this.addItem(df.format(resultadoBusqueda.elementAt(i)));
        }
        try{
            obj.close();                       
        }
        
        catch(Exception e){System.out.println(e.getMessage());}
    }
    
    /**
     * Metodo que obtiene el nombre de un area a partir de su codigo
     * @param codigo codigo de area
     * @return El nombre de area correspondiente al codigo
     */
    public static String obtenerNombreArea(String codigo)
    {
         tablasYBasesdeDatos.JDBCAdapter obj = new tablasYBasesdeDatos.JDBCAdapter(
                                                "jdbc:postgresql://localhost:5432/everest",
                                                 "org.postgresql.Driver","postgres","root");
        
        java.util.Vector resultadoBusqueda = obj.ConsultaIndividual("SELECT areanombre FROM codarea"
                                                                +" WHERE areacodigo = "+Integer.parseInt(codigo)+"");
        
        try{
            obj.close();                       
        }
        
        catch(Exception e){System.out.println(e.getMessage());}
        
        return resultadoBusqueda.elementAt(0).toString();
    }
    
    /**
     * Metodo que obtiene el siguiente consecutivo de un area
     * Ejemplo: Si tengo hasta el libro 510-021, al hacer un llamado a este metodo con el
     * codigo 510, retornaria 022, si no existen libros con el codigo llamado, se devuelve 1
     * @param codigo Codigo con el cual se mira el consecutivo
     * @return El siguiente consecutivo correspondiente al codigo de area
     */
    public static String obtenerProximoConsecutivo(String codigo)
    {
         tablasYBasesdeDatos.JDBCAdapter obj = new tablasYBasesdeDatos.JDBCAdapter(
                                                "jdbc:postgresql://localhost:5432/everest",
                                                 "org.postgresql.Driver","postgres","root");
        
        java.util.Vector resultadoBusqueda = obj.ConsultaIndividual("SELECT MAX(matcons) FROM materialbibliografico"
                                                                +" WHERE areacodigo = "+Integer.parseInt(codigo)+"");
        
        
        try{
            obj.close();                       
        }
        
        catch(Exception e){System.out.println(e.getMessage());}
        
        String retorno="";
        try{            
            retorno = ""+(Integer.parseInt(resultadoBusqueda.elementAt(0).toString())+1);
        }
        catch(NullPointerException npe)
        {
            retorno = "1";
        }
                       
        return retorno;
    }
}
